package com.fau.cm.service;

import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.Map;

import org.apache.poi.ss.usermodel.Workbook;

import com.fau.cm.entity.MedicalAdmin;
import com.fau.cm.entity.MedicalCallContactRecord;
import com.fau.cm.entity.MedicalCallCustomer;
import com.fau.cm.entity.MedicalCallCustomerHealth;
import com.fau.cm.entity.MedicalCallCustomerReminder;
import com.fau.cm.entity.MedicalCity;
import com.fau.cm.entity.MedicalDistrict;
import com.fau.cm.entity.MedicalProvince;
import com.fau.cm.util.Page;

/**
 * @desc  客户管理接口
 * @author yangzj
 * @datetime 2014年10月16日,下午4:56:47
 */
public interface ICustomerManagerService {

	/**
	 * @desc 分页查询客户信息
	 * @param customer
	 * @param map 分页参数
	 * @return Page 分页工具类
	 * @author yangzj
	 * @datetime 2014年10月16日,下午4:58:38
	 */
	public Page findCustomerByPage(MedicalAdmin admin, MedicalCallCustomer customer, Map<String, Object> map);
	
	/**
	 * @desc 分页查询客户信息（组）
	 * @param admin 用户
	 * @param customer
	 * @param map 分页查询
	 * @return Page 分页工具类
	 * @author suny
	 * @datetime 2014年10月28日,上午11:05:31
	 */
	public Page findGroupCustomerByPage(MedicalAdmin admin,MedicalCallCustomer customer,Map<String, Object> map);
	
	/**
	 * @desc 导入客户信息
	 * @param path
	 * @return String
	 * @throws IOException
	 * @author yangzj
	 * @datetime 2014年10月16日,下午10:17:30
	 */
	public String importCustomer(MedicalAdmin admin, MedicalCallCustomer customer, File file) throws Exception;
	
	/**
	 * @desc 导出所有客户信息
	 * @return Workbook
	 * @throws IOException
	 * @author yangzj
	 * @datetime 2014年10月17日,上午11:04:17
	 */
	public Workbook exportCustomer(MedicalAdmin admin,MedicalCallCustomer customer) throws Exception;
	
	/**
	 * @desc 导出当前页客户信息
	 * @return Workbook
	 * @throws IOException
	 * @author yangzj
	 * @datetime 2014年10月17日,上午11:12:07
	 */
	public Workbook currentExportCustomer(MedicalAdmin admin, String ids)throws Exception;
	
	/**
	 * @desc 分页查询我的客户信息
	 * @param customer
	 * @param map 分页参数
	 * @return Page 分页工具类
	 * @author yangzj
	 * @datetime 2014年10月16日,下午4:58:38
	 */
	public Page findMyCustomerByPage(MedicalAdmin admin, MedicalCallCustomer customer, Map<String, Object> map);
	
	/**
	 * @desc 导出我的客户信息
	 * @return Workbook
	 * @throws IOException
	 * @author yangzj
	 * @datetime 2014年10月17日,上午11:04:17
	 */
	public Workbook exportMyCustomer(MedicalAdmin admin) throws Exception;
	
	/**
	 * @desc 导出当前页我的客户信息
	 * @param ids
	 * @return Workbook
	 * @throws IOException
	 * @author yangzj
	 * @datetime 2014年10月17日,上午11:12:07
	 */
	public Workbook currentExportMyCustomer(MedicalAdmin admin, String ids)throws Exception;
	
	/**
	 * @desc 分页查询客户提醒
	 * @param reminder
	 * @param map 分页参数
	 * @return Page 分页工具类
	 * @author yangzj
	 * @datetime 2014年10月17日,下午8:44:21
	 */
	public Page findReminderByPage(MedicalAdmin admin, MedicalCallCustomerReminder reminder, Map<String, Object> map);
	
	/**
	 * @desc 分页查询我的客户提醒
	 * @param reminder
	 * @param map 分页参数
	 * @return Page 分页工具类
	 * @author yangzj
	 * @datetime 2014年10月17日,下午8:44:31
	 */
	public Page findMyReminderByPage(MedicalAdmin admin, MedicalCallCustomerReminder reminder, Map<String, Object> map);
	
	/**
	 * @desc 客户提醒保存修改
	 * @param reminder
	 * @author yangzj
	 * @datetime 2014年10月18日,下午4:11:36
	 */
	public void editSave(MedicalCallCustomerReminder reminder);
	
	/**
	 * @desc 导出所有客户提醒信息
	 * @return Workbook
	 * @throws IOException
	 * @author yangzj
	 * @datetime 2014年10月17日,下午10:45:49
	 */
	public Workbook exportRemind(MedicalAdmin admin) throws Exception;
	
	/**
	 * @desc 导出当前页客户提醒信息
	 * @param ids
	 * @return Workbook
	 * @throws IOException
	 * @author yangzj
	 * @datetime 2014年10月17日,下午10:46:07
	 */
	public Workbook currentExportRemind(MedicalAdmin admin, String ids)throws Exception;
	
	/**
	 * @desc 导出我的所有客户提醒信息
	 * @return Workbook
	 * @throws IOException
	 * @author yangzj
	 * @datetime 2014年10月17日,下午10:45:49
	 */
	public Workbook exportMyRemind(MedicalAdmin admin) throws Exception;
	
	/**
	 * @desc 导出当前页我的客户提醒信息
	 * @param ids
	 * @return Workbook
	 * @throws IOException
	 * @author yangzj
	 * @datetime 2014年10月17日,下午10:46:07
	 */
	public Workbook currentExportMyRemind(MedicalAdmin admin, String ids)throws Exception;
	
	/**
	 * @desc 删除客户提醒
	 * @param reminder
	 * @author yangzj
	 * @datetime 2014年10月18日,上午10:53:11
	 */
	public void deleteRemind(MedicalCallCustomerReminder reminder);
	
	/**
	 * @desc 保存客户信息
	 * @param callCustomer 客户实体类
	 * @param admin	当前操作用户
	 * @author kangyj
	 * @datetime 2014年11月9日,下午1:38:16
	 */
	public String saveCustomer(MedicalCallCustomer callCustomer, MedicalAdmin admin);
	
	/**
	 * @desc 通过话务id查询客户信息
	 * @param callId 话务id
	 * @return
	 * @author kangyj
	 * @datetime 2014年11月6日,下午5:34:02
	 */
	public MedicalCallCustomer findCustomerByCallId(String callId);
	
	/**
	 * @desc 查询省份集合
	 * @return
	 * @author kangyj
	 * @datetime 2014年11月8日,下午6:02:16
	 */
	public List<MedicalProvince> findProvinceList();
	
	/**
	 * @desc 通过省份查询城市集合
	 * @param pId 省份
	 * @return
	 * @author kangyj
	 * @datetime 2014年11月8日,下午6:01:51
	 */
	public List<MedicalCity> findCityListByPid(String pId);
	
	/**
	 * @desc 通过城市查地区集合
	 * @param cId 城市id
	 * @return
	 * @author kangyj
	 * @datetime 2014年11月8日,下午6:01:22
	 */
	public List<MedicalDistrict> findDistrictListByCid(String cId);
	
	/**
	 * @desc 修改用户信息
	 * @param customer
	 * @author kangyj
	 * @datetime 2014年11月9日,上午9:56:47
	 */
	public void editCustomer(MedicalCallCustomer customer);
	
	/**
	 * @desc 分页查询推荐客户数据
	 * @param admin 当前用户
	 * @param customer 推荐客户
	 * @param map 分页参数
	 * @return
	 * @author kangyj
	 * @datetime 2014年11月9日,下午12:06:26
	 */
	public Page findRecCustomerList(MedicalAdmin admin, MedicalCallCustomer customer, Map<String, Object> map);
	
	/**
	 * @desc 根据id 查询当前用户、根据key查询字典表对象
	 * @param customer 客户对象
	 * @param admin 当前用户
	 * @return
	 * @author kangyj
	 * @datetime 2014年11月23日,上午10:56:58
	 */
	public MedicalCallCustomer findCustomerById(MedicalCallCustomer customer, MedicalAdmin admin);
	
	/**
	 * @desc 订单页面修改客户级别
	 * @param customer
	 * @author kangyj
	 * @datetime 2014年11月24日,下午5:23:13
	 */
	public void editCustomerLevel(MedicalCallCustomer customer);

	/**
	 * @desc 根据客户id查询联系记录
	 * @param cId 客户id
	 * @return List<MedicalCallContactRecord>
	 * @author kangyj
	 * @datetime 2014年12月4日,下午12:19:07
	 */
	public List<MedicalCallContactRecord> findContactRecordList(String cId);
	
	/**
	 * @desc 保存联系记录
	 * @param contactRecord 联系记录对象
	 * @author kangyj
	 * @datetime 2014年12月4日,下午8:31:15
	 */
	public void saveContactRecord(MedicalCallContactRecord contactRecord);
	
	
	// 查询通话记录
	
	/**
	 * @desc 根据客户id查询客户提醒
	 * @param cId
	 * @return
	 * @author kangyj
	 * @datetime 2014年12月5日,上午12:37:31
	 */
	public List<MedicalCallCustomerReminder> findCustomeRemindByCId(String cId);
	
	/**
	 * @desc 保存客户提醒
	 * @param customerReminder
	 * @author kangyj
	 * @datetime 2014年12月5日,上午10:14:46
	 */
	public void saveCustomeRemind(MedicalCallCustomerReminder customerReminder);
	
	/**
	 * @desc 根据客户id 查询推荐客户集合
	 * @param cId 客户id
	 * @return
	 * @author kangyj
	 * @datetime 2014年12月5日,下午4:01:55
	 */
	public List<MedicalCallCustomer> findRecommendCustomer(String cId);
	
	/**
	 * @desc 保存推荐客户信息
	 * @param callCustomer 推荐客户对象
	 * @param admin 当前登录用户
	 * @author kangyj
	 * @datetime 2014年12月5日,下午7:12:18
	 */
	public String customerSave(MedicalAdmin admin, MedicalCallCustomer callCustomer);
	
	/**
	 * @desc 根据客户id查询客户健康档案
	 * @param cId 客户id
	 * @return
	 * @author kangyj
	 * @datetime 2014年12月7日,上午11:45:53
	 */
	public List<MedicalCallCustomerHealth> customerHealthView(String cId);	
	
	/**
	 * @desc 保存客户健康档案
	 * @param customerHealth 客户健康档案
	 * @author kangyj
	 * @datetime 2014年12月7日,上午11:47:43
	 */
	public void saveCustomerHealth(MedicalCallCustomerHealth customerHealth);
	
	/**
	 * @desc 删除客户健康档案
	 * @param customerHealth 客户健康档案
	 * @author kangyj
	 * @datetime 2014年12月7日,上午11:48:41
	 */
	public void delCustomerHealth(MedicalCallCustomerHealth customerHealth);
	
	/**
	 * @desc 导入客户到任务
	 * @param admin 当前登录人
	 * @param customer 客户实体类
	 * @author kangyj
	 * @datetime 2015年2月10日,下午4:07:13
	 */
	public void importToCall(MedicalAdmin admin, MedicalCallCustomer customer);
	
	/**
	 * @desc 设置允许客户网退、退单数量
	 * @param customer
	 * @author kangyj
	 * @datetime 2015年2月16日,下午2:59:32
	 */
	public void setBackCount(MedicalCallCustomer customer);
	
	/**
	 * @desc 查询允许客户网退、退单数量
	 * @param customer 客户对象
	 * @return
	 * @author kangyj
	 * @datetime 2015年2月18日,下午1:25:26
	 */
	public String findBackCount(MedicalCallCustomer customer);
	
	/**
	 * @desc 删除新增客户
	 * @param customer void
	 * @author kangyj
	 * @datetime 2015年4月16日,下午7:09:13
	 */
	public void delNewCustomer(MedicalCallCustomer customer);
	
}
